iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Mobile Development

IOS菜逼八連續30天挑戰系列 第 12

Day 12 Swift語法-進階篇(5/5)-Extension

  • 分享至 

  • xImage
  •  

昨天提到了protocol,今天我們就學習一下extenison的用法,昨天我們可以透協定去規範我們的struct或者class等等,我們可以透過將protocol跟extension的結合,去實現swift裡面原本不能做到的事情譬如整數跟小數相除。

import UIKit

protocol Number {
    var doubleValue: Double { get } 
}


extension Double: Number {
    var doubleValue: Double {
        return self
    }
}



extension Int: Number {
    var doubleValue: Double {
        return Double(self)
    }
}

func *(lhs: Number, rhs: Number) -> Double {   //乘法
    return lhs.doubleValue * rhs.doubleValue
}

 func /(lhs: Number, rhs: Number) -> Double {   //除法
    return lhs.doubleValue / rhs.doubleValue
}

let floatNumber: Double = 5.5
let doubleNumber: Int = 2
let resultNumber = floatNumber / doubleNumber
print(resultNumber)

當然你如果你的型態是其他的話,我們只需要新增額外的extension,譬如你的型態是float

extension Float: Number {
    var doubleValue: Double {
        return Double(self)
    }
}

或是你要做加法除法

func +(lhs: Number, rhs: Number) -> Double {   //加法
   return lhs.doubleValue + rhs.doubleValue
}

func -(lhs: Number, rhs: Number) -> Double {   //減法
   return lhs.doubleValue - rhs.doubleValue
}

當然我們也可以結合之前的protocol

protocol ShowID {
    func showId()
}

extension  ShowID {
    func showId () {
        print("1234")
    }
}

protocol ShowUserName {
    func showUserName()
}

extension ShowUserName {
    func showUserName()  {
        print("allen")
    }
}

class User1: ShowID ,ShowUserName { }


let allen = User1()

allen.showUserName()
allen.showId()

我們可以讓class去繼承上面的protocol,再透過extenison的方法,寫說我們協定要幹嘛,這樣做的原因是,我的類別可能需要繼承兩個父類別,但是我們沒辦法做到同時繼承兩個父類別,我就可以透過使用extension的方式去實現它


上一篇
Day 11 Swift語法-進階篇(4/5)-Protocol
下一篇
Day 13 實作調色盤App(1/3)
系列文
IOS菜逼八連續30天挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言